""" 
@coding  : utf-8
@Time    : 2023/4/20 11:43
@Author  : Rumou
@File    : 计算日期差.py
@Description: g
"""

from datetime import date


def list_isdigit(mylist):
    """
    判断列表中的每个元素是否都是digit
    """
    flag = 0
    for i in mylist:
        if i.isdigit():
            flag = 1
        else:
            flag = 0
            break
    if flag:
        return True
    else:
        return False


def verify(input_date_list):
    """
    判断列表中的日期是否符合规范
    如果符合规范，则返回年份长度；否则返回False
    """
    if len(input_date_list) != 3:
        print("输入位数不正确")
        return False
    if not list_isdigit(input_date_list):
        print("输入中含有非数字")
        return False
    input_year = int(input_date_list[0])
    input_mouth = int(input_date_list[1])
    input_day = int(input_date_list[2])
    if input_year == '' or input_mouth == '' or input_day == '':
        print("输入中含有多余空格")
        return False
    if not 1 <= input_mouth <= 12:  # 1<=月份<=31
        print("输入的月份不正确")
        return False
    if not 1 <= input_day <= 31:  # 1<=日期<=31
        print("输入的日期不正确")
        return False
    if input_mouth in [4, 6, 9, 11]:  # 小月份不能有31号
        if input_day == 31:
            print("输入的日期不正确")
            return False
    if input_mouth == 2:
        if (input_year % 4 == 0) and (input_year % 100 != 0) or (input_year % 400) == 0:  # 是闰年
            if input_day > 29:  # 闰年2月只有29号
                print("输入的日期不正确")
                return False
        else:  # 不是闰年
            if input_day > 28:  # 非闰年2月只有28号
                print("输入的日期不正确")
                return False
    return True


def toi(self):
    """
    将列表中的每个元素都转换为int类型
    """
    for index, value in enumerate(self):
        value = int(value)
        self[index] = value


def main():
    date_list = []
    for i in range(2):
        locals()[f'input_date_{i}'] = input(f"请输入第{i + 1}个日期年月日，以空格分隔：")  # input_date_i
        locals()[f'input_date_{i}_list'] = locals()[f'input_date_{i}'].split(" ")  # input_date_i_list
        input_date_list = locals()[f'input_date_{i}_list']  # 本次循环中使用input_date_list简化变量名
        if verify(input_date_list):
            # 验证全部通过，保存变量input_date_i_list到date_list
            toi(input_date_list)
            date_list.append(locals()[f'input_date_{i}_list'])
        else:
            return

    for index, value in enumerate(date_list):
        print(f"你输入的第{index + 1}个日期是：{value}")

    # 定义两个日期
    date1 = date(date_list[0][0], date_list[0][1], date_list[0][2])
    date2 = date(date_list[1][0], date_list[1][1], date_list[1][2])

    # 计算两个日期之间的差值
    delta = date2 - date1

    # 打印差值天数
    print(f"日期相差天数为:{delta.days}天")


# 执行主程序
if __name__ == "__main__":
    main()
